Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
eslint-plugin-unicorn
Advanced tools
The eslint-plugin-unicorn package is a set of ESLint rules that aim to improve code quality by enforcing best practices, preventing common mistakes, and suggesting modern syntax and methods. It includes a variety of rules that are not covered by the core ESLint rules or other plugins, focusing on code enhancements and consistency.
Filename Case
Enforces a specific case for filenames, which can be configured to be kebab-case, camelCase, or snake_case. This helps maintain consistency in the naming of files across a project.
"unicorn/filename-case": ["error", {"case": "kebabCase"}]
Number Literal Case
Enforces lowercase identifier and uppercase value for number literals, improving readability and consistency in the code.
"unicorn/number-literal-case": "error"
Prevent Abbreviations
Discourages the use of abbreviations in variable names, function names, and other identifiers to improve code clarity and readability.
"unicorn/prevent-abbreviations": ["error", {"replacements": {"temp": false, "err": {"error": true}}}]
Better Regex
Suggests simpler and more optimized regular expressions to improve performance and readability.
"unicorn/better-regex": "error"
Consistent Function Scoping
Enforces that functions are defined at the highest possible level, which can help with readability and reduce the complexity of nested functions.
"unicorn/consistent-function-scoping": "error"
This plugin provides linting rules related to ES2015+ import/export syntax, helping to ensure proper import order, naming, and file path correctness. It is similar to eslint-plugin-unicorn in that it enforces best practices, but it focuses specifically on module import and export issues.
This plugin enforces best practices for JavaScript promises. It is similar to eslint-plugin-unicorn in its goal to improve code quality, but it focuses specifically on the use of promises and asynchronous code.
This plugin checks JSX code for accessibility issues, ensuring that web applications are accessible to users with disabilities. While eslint-plugin-unicorn focuses on general JavaScript code quality, eslint-plugin-jsx-a11y focuses on accessibility concerns in React and JSX.
This plugin provides React-specific linting rules. It is similar to eslint-plugin-unicorn in that it helps maintain code quality and consistency, but it is tailored specifically for React development.
More than 100 powerful ESLint rules
You might want to check out XO, which includes this plugin.
Propose or contribute a new rule β‘
npm install --save-dev eslint eslint-plugin-unicorn
Use a preset config or configure each rule in package.json
.
If you don't use the preset, ensure you use the same env
and parserOptions
config as below.
{
"name": "my-awesome-project",
"eslintConfig": {
"env": {
"es2022": true
},
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"unicorn"
],
"rules": {
"unicorn/better-regex": "error",
"unicorn/β¦": "error"
}
}
}
πΌ Configurations enabled in.
π« Configurations disabled in.
β
Set in the recommended
configuration.
π§ Automatically fixable by the --fix
CLI option.
π‘ Manually fixable by editor suggestions.
NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | π« | π§ | π‘ |
---|---|---|---|---|---|
better-regex | Improve regexes by making them shorter, consistent, and safer. | β | π§ | ||
catch-error-name | Enforce a specific parameter name in catch clauses. | β | π§ | ||
consistent-destructuring | Use destructured variables over properties. | β | π§ | π‘ | |
consistent-function-scoping | Move function definitions to the highest possible scope. | β | |||
custom-error-definition | Enforce correct Error subclassing. | β | π§ | ||
empty-brace-spaces | Enforce no spaces between braces. | β | π§ | ||
error-message | Enforce passing a message value when creating a built-in error. | β | |||
escape-case | Require escape sequences to use uppercase values. | β | π§ | ||
expiring-todo-comments | Add expiration conditions to TODO comments. | β | |||
explicit-length-check | Enforce explicitly comparing the length or size property of a value. | β | π§ | π‘ | |
filename-case | Enforce a case style for filenames. | β | |||
import-style | Enforce specific import styles per module. | β | |||
new-for-builtins | Enforce the use of new for all builtins, except String , Number , Boolean , Symbol and BigInt . | β | π§ | ||
no-abusive-eslint-disable | Enforce specifying rules to disable in eslint-disable comments. | β | |||
no-array-callback-reference | Prevent passing a function reference directly to iterator methods. | β | π‘ | ||
no-array-for-each | Prefer forβ¦of over the forEach method. | β | π§ | π‘ | |
no-array-method-this-argument | Disallow using the this argument in array methods. | β | π§ | π‘ | |
no-array-push-push | Enforce combining multiple Array#push() into one call. | β | π§ | π‘ | |
no-array-reduce | Disallow Array#reduce() and Array#reduceRight() . | β | |||
no-await-expression-member | Disallow member access from await expression. | β | π§ | ||
no-console-spaces | Do not use leading/trailing space between console.log parameters. | β | π§ | ||
no-document-cookie | Do not use document.cookie directly. | β | |||
no-empty-file | Disallow empty files. | β | |||
no-for-loop | Do not use a for loop that can be replaced with a for-of loop. | β | π§ | ||
no-hex-escape | Enforce the use of Unicode escapes instead of hexadecimal escapes. | β | π§ | ||
no-instanceof-array | Require Array.isArray() instead of instanceof Array . | β | π§ | ||
no-invalid-remove-event-listener | Prevent calling EventTarget#removeEventListener() with the result of an expression. | β | |||
no-keyword-prefix | Disallow identifiers starting with new or class . | β | |||
no-lonely-if | Disallow if statements as the only statement in if blocks without else . | β | π§ | ||
no-negated-condition | Disallow negated conditions. | β | π§ | ||
no-nested-ternary | Disallow nested ternary expressions. | β | π§ | ||
no-new-array | Disallow new Array() . | β | π§ | π‘ | |
no-new-buffer | Enforce the use of Buffer.from() and Buffer.alloc() instead of the deprecated new Buffer() . | β | π§ | π‘ | |
no-null | Disallow the use of the null literal. | β | π§ | π‘ | |
no-object-as-default-parameter | Disallow the use of objects as default parameters. | β | |||
no-process-exit | Disallow process.exit() . | β | |||
no-static-only-class | Disallow classes that only have static members. | β | π§ | ||
no-thenable | Disallow then property. | β | |||
no-this-assignment | Disallow assigning this to a variable. | β | |||
no-typeof-undefined | Disallow comparing undefined using typeof . | β | π§ | π‘ | |
no-unnecessary-await | Disallow awaiting non-promise values. | β | π§ | ||
no-unreadable-array-destructuring | Disallow unreadable array destructuring. | β | π§ | ||
no-unreadable-iife | Disallow unreadable IIFEs. | β | |||
no-unsafe-regex | Disallow unsafe regular expressions. | β | |||
no-unused-properties | Disallow unused object properties. | β | |||
no-useless-fallback-in-spread | Disallow useless fallback when spreading in object literals. | β | π§ | ||
no-useless-length-check | Disallow useless array length check. | β | π§ | ||
no-useless-promise-resolve-reject | Disallow returning/yielding Promise.resolve/reject() in async functions or promise callbacks | β | π§ | ||
no-useless-spread | Disallow unnecessary spread. | β | π§ | ||
no-useless-switch-case | Disallow useless case in switch statements. | β | π‘ | ||
no-useless-undefined | Disallow useless undefined . | β | π§ | ||
no-zero-fractions | Disallow number literals with zero fractions or dangling dots. | β | π§ | ||
number-literal-case | Enforce proper case for numeric literals. | β | π§ | ||
numeric-separators-style | Enforce the style of numeric separators by correctly grouping digits. | β | π§ | ||
prefer-add-event-listener | Prefer .addEventListener() and .removeEventListener() over on -functions. | β | π§ | ||
prefer-array-find | Prefer .find(β¦) and .findLast(β¦) over the first or last element from .filter(β¦) . | β | π§ | π‘ | |
prefer-array-flat | Prefer Array#flat() over legacy techniques to flatten arrays. | β | π§ | ||
prefer-array-flat-map | Prefer .flatMap(β¦) over .map(β¦).flat() . | β | π§ | ||
prefer-array-index-of | Prefer Array#{indexOf,lastIndexOf}() over Array#{findIndex,findLastIndex}() when looking for the index of an item. | β | π§ | π‘ | |
prefer-array-some | Prefer .some(β¦) over .filter(β¦).length check and .{find,findLast}(β¦) . | β | π§ | π‘ | |
prefer-at | Prefer .at() method for index access and String#charAt() . | β | π§ | π‘ | |
prefer-code-point | Prefer String#codePointAt(β¦) over String#charCodeAt(β¦) and String.fromCodePoint(β¦) over String.fromCharCode(β¦) . | β | π‘ | ||
prefer-date-now | Prefer Date.now() to get the number of milliseconds since the Unix Epoch. | β | π§ | ||
prefer-default-parameters | Prefer default parameters over reassignment. | β | π§ | π‘ | |
prefer-dom-node-append | Prefer Node#append() over Node#appendChild() . | β | π§ | ||
prefer-dom-node-dataset | Prefer using .dataset on DOM elements over calling attribute methods. | β | π§ | ||
prefer-dom-node-remove | Prefer childNode.remove() over parentNode.removeChild(childNode) . | β | π§ | π‘ | |
prefer-dom-node-text-content | Prefer .textContent over .innerText . | β | π‘ | ||
prefer-event-target | Prefer EventTarget over EventEmitter . | β | |||
prefer-export-from | Prefer exportβ¦from when re-exporting. | β | π§ | π‘ | |
prefer-includes | Prefer .includes() over .indexOf() and Array#some() when checking for existence or non-existence. | β | π§ | π‘ | |
prefer-json-parse-buffer | Prefer reading a JSON file as a buffer. | β | π§ | ||
prefer-keyboard-event-key | Prefer KeyboardEvent#key over KeyboardEvent#keyCode . | β | π§ | ||
prefer-logical-operator-over-ternary | Prefer using a logical operator over a ternary. | β | π‘ | ||
prefer-math-trunc | Enforce the use of Math.trunc instead of bitwise operators. | β | π§ | π‘ | |
prefer-modern-dom-apis | Prefer .before() over .insertBefore() , .replaceWith() over .replaceChild() , prefer one of .before() , .after() , .append() or .prepend() over insertAdjacentText() and insertAdjacentElement() . | β | π§ | ||
prefer-modern-math-apis | Prefer modern Math APIs over legacy patterns. | β | π§ | ||
prefer-module | Prefer JavaScript modules (ESM) over CommonJS. | β | π§ | π‘ | |
prefer-native-coercion-functions | Prefer using String , Number , BigInt , Boolean , and Symbol directly. | β | π§ | ||
prefer-negative-index | Prefer negative index over .length - index for {String,Array,TypedArray}#{slice,at}() and Array#splice() . | β | π§ | ||
prefer-node-protocol | Prefer using the node: protocol when importing Node.js builtin modules. | β | π§ | ||
prefer-number-properties | Prefer Number static properties over global ones. | β | π§ | π‘ | |
prefer-object-from-entries | Prefer using Object.fromEntries(β¦) to transform a list of key-value pairs into an object. | β | π§ | ||
prefer-optional-catch-binding | Prefer omitting the catch binding parameter. | β | π§ | ||
prefer-prototype-methods | Prefer borrowing methods from the prototype instead of the instance. | β | π§ | ||
prefer-query-selector | Prefer .querySelector() over .getElementById() , .querySelectorAll() over .getElementsByClassName() and .getElementsByTagName() . | β | π§ | ||
prefer-reflect-apply | Prefer Reflect.apply() over Function#apply() . | β | π§ | ||
prefer-regexp-test | Prefer RegExp#test() over String#match() and RegExp#exec() . | β | π§ | π‘ | |
prefer-set-has | Prefer Set#has() over Array#includes() when checking for existence or non-existence. | β | π§ | π‘ | |
prefer-set-size | Prefer using Set#size instead of Array#length . | β | π§ | ||
prefer-spread | Prefer the spread operator over Array.from(β¦) , Array#concat(β¦) , Array#slice() and String#split('') . | β | π§ | π‘ | |
prefer-string-replace-all | Prefer String#replaceAll() over regex searches with the global flag. | β | π§ | ||
prefer-string-slice | Prefer String#slice() over String#substr() and String#substring() . | β | π§ | ||
prefer-string-starts-ends-with | Prefer String#startsWith() & String#endsWith() over RegExp#test() . | β | π§ | π‘ | |
prefer-string-trim-start-end | Prefer String#trimStart() / String#trimEnd() over String#trimLeft() / String#trimRight() . | β | π§ | ||
prefer-switch | Prefer switch over multiple else-if . | β | π§ | ||
prefer-ternary | Prefer ternary expressions over simple if-else statements. | β | π§ | ||
prefer-top-level-await | Prefer top-level await over top-level promises and async function calls. | β | π‘ | ||
prefer-type-error | Enforce throwing TypeError in type checking conditions. | β | π§ | ||
prevent-abbreviations | Prevent abbreviations. | β | π§ | ||
relative-url-style | Enforce consistent relative URL style. | β | π§ | π‘ | |
require-array-join-separator | Enforce using the separator argument with Array#join() . | β | π§ | ||
require-number-to-fixed-digits-argument | Enforce using the digits argument with Number#toFixed() . | β | π§ | ||
require-post-message-target-origin | Enforce using the targetOrigin argument with window.postMessage() . | β | π‘ | ||
string-content | Enforce better string content. | β | π§ | π‘ | |
switch-case-braces | Enforce consistent brace style for case clauses. | β | π§ | ||
template-indent | Fix whitespace-insensitive template indentation. | β | π§ | ||
text-encoding-identifier-case | Enforce consistent case for text encoding identifiers. | β | π§ | π‘ | |
throw-new-error | Require new when throwing an error. | β | π§ |
See the ESLint docs for more information about extending config files.
Note: Preset configs will also enable the correct parser options and environment.
This plugin exports a recommended
config that enforces good practices.
{
"name": "my-awesome-project",
"eslintConfig": {
"extends": "plugin:unicorn/recommended"
}
}
This plugin exports an all
config that makes use of all rules (except for deprecated ones).
{
"name": "my-awesome-project",
"eslintConfig": {
"extends": "plugin:unicorn/all"
}
}
FAQs
More than 100 powerful ESLint rules
We found that eslint-plugin-unicorn demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.